import { renderImperatively } from '../../utils/render-imperatively'
import { Dialog } from './dialog'
import type {
  DialogShowProps,
  DialogShowHandler,
} from './type'

export const closeFnSet = new Set<() => void>()

/**
 * @description - 推荐使用 `alert` | `confirm`
 * @description - 可以通过调用 Dialog 上的 show 方法直接打开对话框，其中 props 参数的类型同上表，但不支持传入 `visible`、`destroyOnClose`、`forceRender` 属性
 * @description - 当对话框被关闭后，组件实例自动销毁：render-imperatively 会自动调用 unmount
 * @description - `show` 方法的返回值为一个组件控制器，包含`close`属性 - 用来关闭对话框
 */
export const show = (props: DialogShowProps): DialogShowHandler => {
  const handler: DialogShowHandler = renderImperatively(
    <Dialog
      {...props}
      afterClose={() => {
        closeFnSet.delete(handler.close)
        props.afterClose?.()
      }}
    />,
  )
  closeFnSet.add(handler.close)
  return handler
}
